//
//  CZPlaceholderTextView.swift
//  GZWeibo666
//
//  Created by Apple on 15/12/4.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

/// 自定义TextView.里面有一个占位文本,当没有内容的时候会显示出来
class CZPlaceholderTextView: UITextView {
    
    /// 提供属性,让别人来设置占位文本
    var placeholder: String? {
        didSet {
            placeholderLabel.text = placeholder
            placeholderLabel.font = font
        }
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        
        // 设置代理,来监听文本的改变, 会被别人覆盖
//        self.delegate = self
        // 使用通知,不会被别人覆盖
        
        // object: 通知的发送者
        // object = nil, 只要发送 UITextViewTextDidChangeNotification 就能接收到
        // object = 某个对象, 只有 `某个对象` 发出的 UITextViewTextDidChangeNotification 才能监听到
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "textDidChange", name: UITextViewTextDidChangeNotification, object: self)
    }
    
    // 移除通知
    // 相当于dealloc
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    
    // 实现通知方法
    func textDidChange() {
        // 没有内容时,显示占位文本,有文本是隐藏
        placeholderLabel.hidden = hasText()
    }

    // MARK: - 懒加载
    /// 占位文本, 如果提供lebel给别人访问,别人可能会做非法操作
    private lazy var placeholderLabel: UILabel = {
        let label = UILabel()
        label.textColor = UIColor.lightGrayColor()
        label.font = self.font
        self.addSubview(label)
        
        // 添加约束, 独立的view.在其他工程也会使用的话,最好少依赖第三方框架
//        label.ff_AlignInner(type: ff_AlignType.TopLeft, referView: self, size: nil, offset: CGPoint(x: 5, y: 8))
        label.translatesAutoresizingMaskIntoConstraints = false
        self.addConstraint(NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 8))
        
        self.addConstraint(NSLayoutConstraint(item: label, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 5))
        
        label.sizeToFit()
        
        return label
    }()
}

//extension CZPlaceholderTextView: UITextViewDelegate {
//    // 文本改变
//    func textViewDidChange(textView: UITextView) {
//        print("textView:\(textView.text)")
//        
//        // 没有内容时,显示占位文本,有文本是隐藏
//        placeholderLabel.hidden = textView.hasText()
//    }
//}